The Data

Our data is from the Eviction Lab. On their website, they introduce themselves as “The Eviction Lab is a team of researchers, students, and website architects who believe that a stable, affordable home is central to human flourishing and economic mobility. Accordingly, understanding the sudden, traumatic loss of home through eviction is foundational to understanding poverty in America. Drawing on tens of millions of records, the Eviction Lab at Princeton University has published the first-ever dataset of evictions in America, going back to 2000.” One of the main variables of interest is “Eviction Rate,” which is a measure of the number of evictions per 100 renter homes. The data also includes demographic data on both state and county levels.

Our Initial Research Questions

When we began thinking about the data, we had some questions right away about eviction and race. Is there a relationship between race and the eviction rate in the US? There is also rent information in the data, and we wanted to compare rent over each state and see what effect rent had on eviction rates. Some of the final questions we had were what are the states with the highest eviction filing rates, and if there are states where it is easier to evict people.

Some Preliminary Graphs

First, we wanted to explore the data with a plotly graph and mapped the 2016 eviction rates by state. After looking at that graph and discussing what we wanted to show with our data (Courtesy of Eviction Lab), we decided to make a shiny app. We wanted an app that users could interact with to see eviction rates over time as well as interact with demographics and other data by state to see relationships between that data and eviction rates.

To help us look at the data and see how it is related, we made a correlation plot with race and the eviction-related variables. Unfortunately, nothing jumped out at us. We found it interesting that the percent of white people in a state was negatively correlated with all of the eviction variables, but the percent of African American people is positively correlated, though these relationships are both weak.

When looking at a similar plot with rent, population data, and the relationship with the eviction variables, once again, nothing jumps out at us that is not already to be expected. There is a strong positive relationship between evictions, population, and renter-occupied households. We would expect this to be true since places with more people will have more evictions. Other variable relationships with Eviction Rate are all very weak, and we do not feel confident about a causal relationship.

This graph, for example, overlays eviction rates on a map of the US that is colored by population. We can see that population does not substantially affect eviction rates as California and Texas do not have significantly high eviction rates compared to states like South Carolina and Delaware, which have much lower populations.

Race and Evictions in Minnesota

Looking at the counties with the highest percentage of African Americans in Minnesota compared to the counties with the highest eviction rates shows that there is not much overlap in Minnesota. Hennepin County (the county with the highest percentage of African Americans) has a very average eviction rate compared to the other counties in Minnesota. Hennepin County does have the highest number of evictions in the state, and while the rate may be low, there is a gap in the data. We do not know if African American renters are evicted at higher rates because we do not have eviction data by race. So while the rate in the county with the highest number of evictions is low, it could be disproportionately African Americans who are evicted.

Our Shiny App

Click Here to interact with the data yourself! Choose from various factors like race, median rent, and year to display graphs to see relationships between demographics and evictions. The first tab displays statewide data, and the second “by state” tab displays individual states and their county-level data. Both tabs have a check box that allows the user to overlay eviction rate data over states and counties. This allows for a comparison between the eviction rate and the demographics of those places.

Final Remarks

We observe that areas with larger populations have higher eviction rates, which is pretty straightforward. More people means more renters, which means more chances for evictions. States like Nevada and Arizona had large eviction rates at first, but over time they have diminished, while states like South Carolina have seen considerable rises in their eviction rates. In 2008-09 the eviction crisis was high, mirroring the economic crisis. We hope that creating this app will make it easier to make insights about eviction data in the U.S. and produce easy-to-understand visualizations of the eviction data.

LS0tDQp0aXRsZTogIkZpbmFsIFByb2plY3QiDQphdXRob3I6ICJBbGV4YW5kZXIgSG9wa2lucywgQnJldHQgSHVuc2FuZ2VyICYgVGVkIERvdmUiDQpvdXRwdXQ6IA0KICBodG1sX2RvY3VtZW50Og0KICAgIGtlZXBfbWQ6IFRSVUUNCiAgICB0b2M6IFRSVUUNCiAgICB0b2NfZmxvYXQ6IFRSVUUNCiAgICBkZl9wcmludDogcGFnZWQNCiAgICBjb2RlX2Rvd25sb2FkOiB0cnVlDQotLS0NCg0KYGBge3Igc2V0dXAsIGluY2x1ZGU9RkFMU0V9DQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IEZBTFNFLCBlcnJvcj1UUlVFLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFKQ0KYGBgDQoNCmBgYHtyIGxpYnJhcmllc30NCmxpYnJhcnkodGlkeXZlcnNlKSAgICAgIyBmb3IgZGF0YSBjbGVhbmluZyBhbmQgcGxvdHRpbmcNCmxpYnJhcnkobHVicmlkYXRlKSAgICAgIyBmb3IgZGF0ZSBtYW5pcHVsYXRpb24NCmxpYnJhcnkob3BlbmludHJvKSAgICAgIyBmb3IgdGhlIGFiYnIyc3RhdGUoKSBmdW5jdGlvbg0KbGlicmFyeShtYXBzKSAgICAgICAgICAjIGZvciBtYXAgZGF0YQ0KbGlicmFyeShnZ21hcCkgICAgICAgICAjIGZvciBtYXBwaW5nIHBvaW50cyBvbiBtYXBzDQpsaWJyYXJ5KGdwbG90cykgICAgICAgICMgZm9yIGNvbDJoZXgoKSBmdW5jdGlvbg0KbGlicmFyeShSQ29sb3JCcmV3ZXIpICAjIGZvciBjb2xvciBwYWxldHRlcw0KbGlicmFyeShzZikgICAgICAgICAgICAjIGZvciB3b3JraW5nIHdpdGggc3BhdGlhbCBkYXRhDQpsaWJyYXJ5KGxlYWZsZXQpICAgICAgICMgZm9yIGhpZ2hseSBjdXN0b21pemFibGUgbWFwcGluZw0KbGlicmFyeShnZ3RoZW1lcykgICAgICAjIGZvciBtb3JlIHRoZW1lcyAoaW5jbHVkaW5nIHRoZW1lX21hcCgpKQ0KbGlicmFyeShwbG90bHkpICAgICAgICAjIGZvciB0aGUgZ2dwbG90bHkoKSAtIGJhc2ljIGludGVyYWN0aXZpdHkNCmxpYnJhcnkoZ2dhbmltYXRlKSAgICAgIyBmb3IgYWRkaW5nIGFuaW1hdGlvbiBsYXllcnMgdG8gZ2dwbG90cw0KbGlicmFyeShnaWZza2kpICAgICAgICAjIGZvciBjcmVhdGluZyB0aGUgZ2lmIChkb24ndCBuZWVkIHRvIGxvYWQgdGhpcyBsaWJyYXJ5IGV2ZXJ5IHRpbWUsYnV0IG5lZWQgaXQgaW5zdGFsbGVkKQ0KbGlicmFyeSh0cmFuc2Zvcm1yKSAgICAjIGZvciAidHdlZW5pbmciIChnZ2FuaW1hdGUpDQpsaWJyYXJ5KHNoaW55KSAgICAgICAgICMgZm9yIGNyZWF0aW5nIGludGVyYWN0aXZlIGFwcHMNCmxpYnJhcnkocGF0Y2h3b3JrKSAgICAgIyBmb3IgbmljZWx5IGNvbWJpbmluZyBnZ3Bsb3QyIGdyYXBocyAgDQpsaWJyYXJ5KGd0KSAgICAgICAgICAgICMgZm9yIGNyZWF0aW5nIG5pY2UgdGFibGVzDQpsaWJyYXJ5KHJ2ZXN0KSAgICAgICAgICMgZm9yIHNjcmFwaW5nIGRhdGENCmxpYnJhcnkocm9ib3RzdHh0KSAgICAgIyBmb3IgY2hlY2tpbmcgaWYgeW91IGNhbiBzY3JhcGUgZGF0YQ0KbGlicmFyeShyZWFkeGwpDQpsaWJyYXJ5KHNjYWxlcykNCnRoZW1lX3NldCh0aGVtZV9taW5pbWFsKCkpDQpgYGANCg0KYGBge3IgZGF0YX0NCiNFdmljdGlvbiBkYXRhIGZyb20gdGhlIEV2aWN0aW9uIExhYg0KZXZpY3Rpb25zX3N0YXRlIDwtIHJlYWRfY3N2KCJldmljdGlvbnNfc3RhdGUuY3N2IikNCnN0YXRlc19taWRwb2ludCA8LSByZWFkX2Nzdigic3RhdGUtbWlkcG9pbnRzLmNzdiIpDQoNCmV2aWN0aW9uc19jb3VudHkgPC0gcmVhZF9jc3YoImV2aWN0aW9uc19jb3VudHkuY3N2IikgJT4lIA0KICBzZXBhcmF0ZShjb2wgPSBuYW1lLCBzZXAgPSAiIENvdW50eSIsIGludG8gPSBjKCJuYW1lIiwgImRyb3AiKSkgJT4lIA0KICBzZWxlY3QoLWRyb3ApICU+JSANCiAgbXV0YXRlKG5hbWUgPSBzdHJfcmVwbGFjZV9hbGwobmFtZSwgIlN0LiAiLCAiU3QgIiksDQogICAgICAgICBuYW1lID0gc3RyX3JlcGxhY2VfYWxsKG5hbWUsICIgUGFyaXNoIiwgIiIpKQ0KDQpldmljdGlvbnNfY291bnR5JG5hbWVbZXZpY3Rpb25zX2NvdW50eSRuYW1lID09ICJMYU1vdXJlIl0gPC0gIkxhIE1vdXJlIg0KZXZpY3Rpb25zX2NvdW50eSRuYW1lW2V2aWN0aW9uc19jb3VudHkkbmFtZSA9PSAiRHVQYWdlIl0gPC0gIkR1IFBhZ2UiDQpldmljdGlvbnNfY291bnR5JG5hbWVbZXZpY3Rpb25zX2NvdW50eSRuYW1lID09ICJPJ0JyaWVuIl0gPC0gIk9CcmllbiINCmV2aWN0aW9uc19jb3VudHkkbmFtZVtldmljdGlvbnNfY291bnR5JG5hbWUgPT0gIlN0ZS4gR2VuZXZpZXZlIl0gPC0gIlN0ZSBHZW5ldmlldmUiDQoNCnN0YXRlc19tYXAgPC0gbWFwX2RhdGEoInN0YXRlIikNCmNvdW50eV9tYXAgPC0gbWFwX2RhdGEoImNvdW50eSIpDQpgYGANCg0KIyMjIFRoZSBEYXRhDQpPdXIgZGF0YSBpcyBmcm9tIHRoZSBbRXZpY3Rpb24gTGFiXShodHRwczovL2V2aWN0aW9ubGFiLm9yZy8pLiBPbiB0aGVpciB3ZWJzaXRlLCB0aGV5IGludHJvZHVjZSB0aGVtc2VsdmVzIGFzICJUaGUgRXZpY3Rpb24gTGFiIGlzIGEgdGVhbSBvZiByZXNlYXJjaGVycywgc3R1ZGVudHMsIGFuZCB3ZWJzaXRlIGFyY2hpdGVjdHMgd2hvIGJlbGlldmUgdGhhdCBhIHN0YWJsZSwgYWZmb3JkYWJsZSBob21lIGlzIGNlbnRyYWwgdG8gaHVtYW4gZmxvdXJpc2hpbmcgYW5kIGVjb25vbWljIG1vYmlsaXR5LiBBY2NvcmRpbmdseSwgdW5kZXJzdGFuZGluZyB0aGUgc3VkZGVuLCB0cmF1bWF0aWMgbG9zcyBvZiBob21lIHRocm91Z2ggZXZpY3Rpb24gaXMgZm91bmRhdGlvbmFsIHRvIHVuZGVyc3RhbmRpbmcgcG92ZXJ0eSBpbiBBbWVyaWNhLiBEcmF3aW5nIG9uIHRlbnMgb2YgbWlsbGlvbnMgb2YgcmVjb3JkcywgdGhlIEV2aWN0aW9uIExhYiBhdCBQcmluY2V0b24gVW5pdmVyc2l0eSBoYXMgcHVibGlzaGVkIHRoZSBmaXJzdC1ldmVyIGRhdGFzZXQgb2YgZXZpY3Rpb25zIGluIEFtZXJpY2EsIGdvaW5nIGJhY2sgdG8gMjAwMC4iIE9uZSBvZiB0aGUgbWFpbiB2YXJpYWJsZXMgb2YgaW50ZXJlc3QgaXMgIkV2aWN0aW9uIFJhdGUsIiB3aGljaCBpcyBhIG1lYXN1cmUgb2YgdGhlIG51bWJlciBvZiBldmljdGlvbnMgcGVyIDEwMCByZW50ZXIgaG9tZXMuIFRoZSBkYXRhIGFsc28gaW5jbHVkZXMgZGVtb2dyYXBoaWMgZGF0YSBvbiBib3RoIHN0YXRlIGFuZCBjb3VudHkgbGV2ZWxzLg0KDQojIyMgT3VyIEluaXRpYWwgUmVzZWFyY2ggUXVlc3Rpb25zDQpXaGVuIHdlIGJlZ2FuIHRoaW5raW5nIGFib3V0IHRoZSBkYXRhLCB3ZSBoYWQgc29tZSBxdWVzdGlvbnMgcmlnaHQgYXdheSBhYm91dCBldmljdGlvbiBhbmQgcmFjZS4gSXMgdGhlcmUgYSByZWxhdGlvbnNoaXAgYmV0d2VlbiByYWNlIGFuZCB0aGUgZXZpY3Rpb24gcmF0ZSBpbiB0aGUgVVM/IFRoZXJlIGlzIGFsc28gcmVudCBpbmZvcm1hdGlvbiBpbiB0aGUgZGF0YSwgYW5kIHdlIHdhbnRlZCB0byBjb21wYXJlIHJlbnQgb3ZlciBlYWNoIHN0YXRlIGFuZCBzZWUgd2hhdCBlZmZlY3QgcmVudCBoYWQgb24gZXZpY3Rpb24gcmF0ZXMuIFNvbWUgb2YgdGhlIGZpbmFsIHF1ZXN0aW9ucyB3ZSBoYWQgd2VyZSB3aGF0IGFyZSB0aGUgc3RhdGVzIHdpdGggdGhlIGhpZ2hlc3QgZXZpY3Rpb24gZmlsaW5nIHJhdGVzLCBhbmQgaWYgdGhlcmUgYXJlIHN0YXRlcyB3aGVyZSBpdCBpcyBlYXNpZXIgdG8gZXZpY3QgcGVvcGxlLiANCg0KIyMjIFNvbWUgUHJlbGltaW5hcnkgR3JhcGhzDQpGaXJzdCwgd2Ugd2FudGVkIHRvIGV4cGxvcmUgdGhlIGRhdGEgd2l0aCBhIHBsb3RseSBncmFwaCBhbmQgbWFwcGVkIHRoZSAyMDE2IGV2aWN0aW9uIHJhdGVzIGJ5IHN0YXRlLiBBZnRlciBsb29raW5nIGF0IHRoYXQgZ3JhcGggYW5kIGRpc2N1c3Npbmcgd2hhdCB3ZSB3YW50ZWQgdG8gc2hvdyB3aXRoIG91ciBkYXRhIChDb3VydGVzeSBvZiBFdmljdGlvbiBMYWIpLCB3ZSBkZWNpZGVkIHRvIG1ha2UgYSBzaGlueSBhcHAuICBXZSB3YW50ZWQgYW4gYXBwIHRoYXQgdXNlcnMgY291bGQgaW50ZXJhY3Qgd2l0aCB0byBzZWUgZXZpY3Rpb24gcmF0ZXMgb3ZlciB0aW1lIGFzIHdlbGwgYXMgaW50ZXJhY3Qgd2l0aCBkZW1vZ3JhcGhpY3MgYW5kIG90aGVyIGRhdGEgYnkgc3RhdGUgdG8gc2VlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGF0IGRhdGEgYW5kIGV2aWN0aW9uIHJhdGVzLiAgDQoNCmBgYHtyfQ0KZXZpY3RfcmF0ZV9tYXAgPC0gZXZpY3Rpb25zX3N0YXRlICU+JSANCiAgZmlsdGVyKHllYXIgPT0gMjAxNikgJT4lIA0KICBtdXRhdGUobmFtZSA9IHN0cl90b19sb3dlcihuYW1lKSkgJT4lIA0KICBnZ3Bsb3QoKSArDQogIGdlb21fbWFwKG1hcCA9IHN0YXRlc19tYXAsDQogICAgICAgICAgIGFlcyhtYXBfaWQgPSBuYW1lLA0KICAgICAgICAgICAgICAgZmlsbCA9IGBldmljdGlvbi1yYXRlYCwNCiAgICAgICAgICAgICAgIHRleHQgPSBwYXN0ZTAobmFtZSwgcGFzdGUwKCI6PGJyPiIsIGBldmljdGlvbi1yYXRlYCkpKSkgKw0KICBleHBhbmRfbGltaXRzKHggPSBzdGF0ZXNfbWFwJGxvbmcsIHkgPSBzdGF0ZXNfbWFwJGxhdCkgKyANCiAgdGhlbWVfbWFwKCkgKw0KICBsYWJzKHRpdGxlID0gIiIsDQogICAgICAgZmlsbCA9ICIiKSArDQogIHNjYWxlX2ZpbGxfdmlyaWRpc19jKCkgKw0KICB0aGVtZShsZWdlbmQuYmFja2dyb3VuZCA9IGVsZW1lbnRfYmxhbmsoKSkgKw0KICBsYWJzKHRpdGxlID0gIkV2aWN0aW9uIFJhdGUgYnkgU3RhdGUgaW4gMjAxNiIpDQoNCiAgZ2dwbG90bHkoZXZpY3RfcmF0ZV9tYXAsIHRvb2x0aXAgPSAidGV4dCIpDQpgYGANCg0KVG8gaGVscCB1cyBsb29rIGF0IHRoZSBkYXRhIGFuZCBzZWUgaG93IGl0IGlzIHJlbGF0ZWQsIHdlIG1hZGUgYSBjb3JyZWxhdGlvbiBwbG90IHdpdGggcmFjZSBhbmQgdGhlIGV2aWN0aW9uLXJlbGF0ZWQgdmFyaWFibGVzLiBVbmZvcnR1bmF0ZWx5LCBub3RoaW5nIGp1bXBlZCBvdXQgYXQgdXMuIFdlIGZvdW5kIGl0IGludGVyZXN0aW5nIHRoYXQgdGhlIHBlcmNlbnQgb2Ygd2hpdGUgcGVvcGxlIGluIGEgc3RhdGUgd2FzIG5lZ2F0aXZlbHkgY29ycmVsYXRlZCB3aXRoIGFsbCBvZiB0aGUgZXZpY3Rpb24gdmFyaWFibGVzLCBidXQgdGhlIHBlcmNlbnQgb2YgQWZyaWNhbiBBbWVyaWNhbiBwZW9wbGUgaXMgcG9zaXRpdmVseSBjb3JyZWxhdGVkLCB0aG91Z2ggdGhlc2UgcmVsYXRpb25zaGlwcyBhcmUgYm90aCB3ZWFrLg0KDQpgYGB7cn0NCmNvcnJwbG90IDwtIGV2aWN0aW9uc19zdGF0ZVssIGMoMTM6MjQpXQ0KDQpjb3JycGxvdCA8LSBjb3JycGxvdCAlPiUgDQogIHJlbmFtZSgNCiAgICBgJSBXaGl0ZWAgPSBgcGN0LXdoaXRlYCwNCiAgICBgJSBBZnJpY2FuIEFtZXJpY2FuYCA9IGBwY3QtYWYtYW1gICwNCiAgICBgJSBIaXNwYW5pY2AgPSBgcGN0LWhpc3BhbmljYCwNCiAgICBgJSBBbWVyaWNhbiBJbmRpYW4gYD0gYHBjdC1hbS1pbmRgLA0KICAgIGAlIEFzaWFuYCA9IGBwY3QtYXNpYW5gLA0KICAgIGAlIFBhY2lmaWMgSXNsYW5kZXJgID0gYHBjdC1uaC1waWAsDQogICAgYCUgTXVsdGlwbGVgID0gYHBjdC1tdWx0aXBsZWAsDQogICAgYCUgT3RoZXJgID0gYHBjdC1vdGhlcmAsDQogICAgYEV2aWN0aW9uIEZpbGluZ3NgID0gYGV2aWN0aW9uLWZpbGluZ3NgLA0KICAgIGBFdmljdGlvbnNgID0gYGV2aWN0aW9uc2AsDQogICAgYEV2aWN0aW9uIFJhdGVgID0gYGV2aWN0aW9uLXJhdGVgLA0KICAgIGBFdmljdGlvbiBGaWxpbmcgUmF0ZWAgPSBgZXZpY3Rpb24tZmlsaW5nLXJhdGVgICAgICAgICAgICAgICANCiAgKQ0KDQpjb3JycGxvdCA8LSByb3VuZChjb3IoY29ycnBsb3QsIHVzZSA9ICJwYWlyd2lzZS5jb21wbGV0ZS5vYnMiKSwyKQ0KDQpsaWJyYXJ5KHJlc2hhcGUyKQ0KbWVsdGVkX2Nvcm1hdCA8LSBtZWx0KGNvcnJwbG90KQ0KDQogICMgR2V0IHVwcGVyIHRyaWFuZ2xlIG9mIHRoZSBjb3JyZWxhdGlvbiBtYXRyaXgNCiAgZ2V0X3VwcGVyX3RyaSA8LSBmdW5jdGlvbihjb3JtYXQpew0KICAgIGNvcm1hdFtsb3dlci50cmkoY29ybWF0KV08LSBOQQ0KICAgIHJldHVybihjb3JtYXQpDQogIH0NCiAgdXBwZXJfdHJpIDwtIGdldF91cHBlcl90cmkoY29ycnBsb3QpDQoNCm1lbHRlZF9jb3JtYXQgPC0gbWVsdCh1cHBlcl90cmksIG5hLnJtID0gVFJVRSkNCmdncGxvdChkYXRhID0gbWVsdGVkX2Nvcm1hdCwgYWVzKFZhcjIsIFZhcjEsIGZpbGwgPSB2YWx1ZSkpKw0KIGdlb21fdGlsZShjb2xvciA9ICJ3aGl0ZSIpKw0KIHNjYWxlX2ZpbGxfZ3JhZGllbnQyKGxvdyA9ICJibHVlIiwgaGlnaCA9ICJyZWQiLCBtaWQgPSAid2hpdGUiLCANCiAgIG1pZHBvaW50ID0gMCwgbGltaXQgPSBjKC0xLDEpLCBzcGFjZSA9ICJMYWIiLCANCiAgIG5hbWU9IlBlYXJzb25cbkNvcnJlbGF0aW9uIikgKw0KICB0aGVtZV9taW5pbWFsKCkrIA0KIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIHZqdXN0ID0gMSwgDQogICAgc2l6ZSA9IDEwLCBoanVzdCA9IDEpLA0KICAgIHBsb3QudGl0bGUucG9zaXRpb24gPSAicGxvdCIpKw0KICBsYWJzKHRpdGxlID0gIkV2aWN0aW9uIENvcnJlbGF0aW9uIFBsb3Qgd2l0aCBSYWNlIFJlbGF0ZWQgVmFyaWFibGVzIiwNCiAgICAgICB5ID0gIiIsDQogICAgICAgeCA9ICIiKSArDQogY29vcmRfZml4ZWQoKSANCmBgYA0KDQpXaGVuIGxvb2tpbmcgYXQgYSBzaW1pbGFyIHBsb3Qgd2l0aCByZW50LCBwb3B1bGF0aW9uIGRhdGEsIGFuZCB0aGUgcmVsYXRpb25zaGlwIHdpdGggdGhlIGV2aWN0aW9uIHZhcmlhYmxlcywgb25jZSBhZ2Fpbiwgbm90aGluZyBqdW1wcyBvdXQgYXQgdXMgdGhhdCBpcyBub3QgYWxyZWFkeSB0byBiZSBleHBlY3RlZC4gVGhlcmUgaXMgYSBzdHJvbmcgcG9zaXRpdmUgcmVsYXRpb25zaGlwIGJldHdlZW4gZXZpY3Rpb25zLCBwb3B1bGF0aW9uLCBhbmQgcmVudGVyLW9jY3VwaWVkIGhvdXNlaG9sZHMuIFdlIHdvdWxkIGV4cGVjdCB0aGlzIHRvIGJlIHRydWUgc2luY2UgcGxhY2VzIHdpdGggbW9yZSBwZW9wbGUgd2lsbCBoYXZlIG1vcmUgZXZpY3Rpb25zLiBPdGhlciB2YXJpYWJsZSByZWxhdGlvbnNoaXBzIHdpdGggRXZpY3Rpb24gUmF0ZSBhcmUgYWxsIHZlcnkgd2VhaywgYW5kIHdlIGRvIG5vdCBmZWVsIGNvbmZpZGVudCBhYm91dCBhIGNhdXNhbCByZWxhdGlvbnNoaXAuDQoNCmBgYHtyfQ0KY29ycnBsb3QyIDwtIGV2aWN0aW9uc19zdGF0ZVssIGMoNToxMiwgMjE6MjQpXQ0KDQpjb3JycGxvdDIgPC0gY29ycnBsb3QyICU+JSANCiAgcmVuYW1lKA0KICAgIGBQb3B1bGF0aW9uYCA9IGBwb3B1bGF0aW9uYCwNCiAgICBgUG92ZXJ0eSBSYXRlYCA9IGBwb3ZlcnR5LXJhdGVgICwNCiAgICBgUmVudGVyIE9jY3VwaWVkIEhvdXNlaG9sZHNgID0gYHJlbnRlci1vY2N1cGllZC1ob3VzZWhvbGRzYCwNCiAgICBgJSBSZW50ZXIgT2NjdXBpZWRgPSBgcGN0LXJlbnRlci1vY2N1cGllZGAsDQogICAgYE1lZGlhbiBHcm9zcyBSZW50YCA9IGBtZWRpYW4tZ3Jvc3MtcmVudGAsDQogICAgYE1lZGlhbiBIb3VzZWhvbGQgSW5jb21lYCA9IGBtZWRpYW4taG91c2Vob2xkLWluY29tZWAsDQogICAgYE1lZGlhbiBQcm9wZXJ0eSBWYWx1ZWAgPSBgbWVkaWFuLXByb3BlcnR5LXZhbHVlYCwNCiAgICBgUmVudCBCdXJkZW5gID0gYHJlbnQtYnVyZGVuYCwNCiAgICBgRXZpY3Rpb24gRmlsaW5nc2AgPSBgZXZpY3Rpb24tZmlsaW5nc2AsDQogICAgYEV2aWN0aW9uc2AgPSBgZXZpY3Rpb25zYCwNCiAgICBgRXZpY3Rpb24gUmF0ZWAgPSBgZXZpY3Rpb24tcmF0ZWAsDQogICAgYEV2aWN0aW9uIEZpbGluZyBSYXRlYCA9IGBldmljdGlvbi1maWxpbmctcmF0ZWAgICAgICAgICAgICAgIA0KICApDQoNCmNvcnJwbG90MiA8LSByb3VuZChjb3IoY29ycnBsb3QyLCB1c2UgPSAicGFpcndpc2UuY29tcGxldGUub2JzIiksMikNCg0KbGlicmFyeShyZXNoYXBlMikNCm1lbHRlZF9jb3JtYXQgPC0gbWVsdChjb3JycGxvdDIpDQoNCiMgR2V0IHVwcGVyIHRyaWFuZ2xlIG9mIHRoZSBjb3JyZWxhdGlvbiBtYXRyaXgNCiAgZ2V0X3VwcGVyX3RyaSA8LSBmdW5jdGlvbihjb3JtYXQpew0KICAgIGNvcm1hdFtsb3dlci50cmkoY29ybWF0KV08LSBOQQ0KICAgIHJldHVybihjb3JtYXQpDQogIH0NCnVwcGVyX3RyaSA8LSBnZXRfdXBwZXJfdHJpKGNvcnJwbG90MikNCg0KbWVsdGVkX2Nvcm1hdCA8LSBtZWx0KHVwcGVyX3RyaSwgbmEucm0gPSBUUlVFKQ0KZ2dwbG90KGRhdGEgPSBtZWx0ZWRfY29ybWF0LCBhZXMoVmFyMiwgVmFyMSwgZmlsbCA9IHZhbHVlKSkgKw0KIGdlb21fdGlsZShjb2xvciA9ICJ3aGl0ZSIpICsNCiBzY2FsZV9maWxsX2dyYWRpZW50Mihsb3cgPSAiYmx1ZSIsIGhpZ2ggPSAicmVkIiwgbWlkID0gIndoaXRlIiwgDQogICBtaWRwb2ludCA9IDAsIGxpbWl0ID0gYygtMSwxKSwgc3BhY2UgPSAiTGFiIiwgDQogICBuYW1lPSJQZWFyc29uXG5Db3JyZWxhdGlvbiIpICsNCiAgdGhlbWVfbWluaW1hbCgpKyANCiB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCB2anVzdCA9IDEsIA0KICAgIHNpemUgPSAxMCwgaGp1c3QgPSAxKSwNCiAgICBwbG90LnRpdGxlLnBvc2l0aW9uID0gInBsb3QiKSsNCiAgbGFicyh0aXRsZSA9ICJFdmljdGlvbiBDb3JyZWxhdGlvbiBQbG90IHdpdGggUmVudCBSZWxhdGVkIFZhcmlhYmxlcyIsDQogICAgICAgeSA9ICIiLA0KICAgICAgIHggPSAiIikgKw0KIGNvb3JkX2ZpeGVkKCkgDQpgYGANCg0KVGhpcyBncmFwaCwgZm9yIGV4YW1wbGUsIG92ZXJsYXlzIGV2aWN0aW9uIHJhdGVzIG9uIGEgbWFwIG9mIHRoZSBVUyB0aGF0IGlzIGNvbG9yZWQgYnkgcG9wdWxhdGlvbi4gV2UgY2FuIHNlZSB0aGF0IHBvcHVsYXRpb24gZG9lcyBub3Qgc3Vic3RhbnRpYWxseSBhZmZlY3QgZXZpY3Rpb24gcmF0ZXMgYXMgQ2FsaWZvcm5pYSBhbmQgVGV4YXMgZG8gbm90IGhhdmUgc2lnbmlmaWNhbnRseSBoaWdoIGV2aWN0aW9uIHJhdGVzIGNvbXBhcmVkIHRvIHN0YXRlcyBsaWtlIFNvdXRoIENhcm9saW5hIGFuZCBEZWxhd2FyZSwgd2hpY2ggaGF2ZSBtdWNoIGxvd2VyIHBvcHVsYXRpb25zLg0KDQpgYGB7cn0NCm9wdGlvbnMoc2NpcGVuID0gOSkNCmV2aWN0aW9uc19zdGF0ZSAlPiUgDQogIGxlZnRfam9pbihzdGF0ZXNfbWlkcG9pbnQsDQogICAgICAgICAgICBieSA9IGMoIm5hbWUiID0gImxvY2F0aW9uIikpICU+JSANCiAgZmlsdGVyKHllYXIgPT0gMjAxNiwNCiAgICAgICAgIG5hbWUgIT0gIkhhd2FpaSIpICU+JSANCiAgbXV0YXRlKG5hbWUgPSBzdHJfdG9fbG93ZXIobmFtZSkpICU+JSANCiAgZ2dwbG90KCkgKw0KICBnZW9tX21hcChtYXAgPSBzdGF0ZXNfbWFwLA0KICAgICAgICAgICBhZXMobWFwX2lkID0gbmFtZSwNCiAgICAgICAgICAgICAgIGZpbGwgPSBwb3B1bGF0aW9uKSkgKw0KICBnZW9tX3BvaW50KGFlcyh4ID0gbG9uLCB5ID0gbGF0LCBzaXplID0gYGV2aWN0aW9uLXJhdGVgKSwNCiAgICAgICAgICAgICBjb2xvciA9ICJ0b21hdG8iKSArDQogIGV4cGFuZF9saW1pdHMoeCA9IHN0YXRlc19tYXAkbG9uZywgeSA9IHN0YXRlc19tYXAkbGF0KSArIA0KICB0aGVtZV9tYXAoKSArDQogIGxhYnModGl0bGUgPSAiIiwNCiAgICAgICBmaWxsID0gIlBvcHVsYXRpb24iLA0KICAgICAgIHNpemUgPSAiRXZpY3Rpb24gUmF0ZSIpICsNCiAgc2NhbGVfZmlsbF92aXJpZGlzX2MobGFiZWxzID0gY29tbWEpICsNCiAgdGhlbWUobGVnZW5kLmJhY2tncm91bmQgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICJyaWdodCIpICsNCiAgbGFicyh0aXRsZSA9ICJQb3B1bGF0aW9uIGFuZCBFdmljdGlvbiByYXRlcyBpbiAyMDE2IikNCmBgYA0KDQojIyMgUmFjZSBhbmQgRXZpY3Rpb25zIGluIE1pbm5lc290YQ0KDQpMb29raW5nIGF0IHRoZSBjb3VudGllcyB3aXRoIHRoZSBoaWdoZXN0IHBlcmNlbnRhZ2Ugb2YgQWZyaWNhbiBBbWVyaWNhbnMgaW4gTWlubmVzb3RhIGNvbXBhcmVkIHRvIHRoZSBjb3VudGllcyB3aXRoIHRoZSBoaWdoZXN0IGV2aWN0aW9uIHJhdGVzIHNob3dzIHRoYXQgdGhlcmUgaXMgbm90IG11Y2ggb3ZlcmxhcCBpbiBNaW5uZXNvdGEuIEhlbm5lcGluIENvdW50eSAodGhlIGNvdW50eSB3aXRoIHRoZSBoaWdoZXN0IHBlcmNlbnRhZ2Ugb2YgQWZyaWNhbiBBbWVyaWNhbnMpIGhhcyBhIHZlcnkgYXZlcmFnZSBldmljdGlvbiByYXRlIGNvbXBhcmVkIHRvIHRoZSBvdGhlciBjb3VudGllcyBpbiBNaW5uZXNvdGEuIEhlbm5lcGluIENvdW50eSBkb2VzIGhhdmUgdGhlIGhpZ2hlc3QgbnVtYmVyIG9mIGV2aWN0aW9ucyBpbiB0aGUgc3RhdGUsIGFuZCB3aGlsZSB0aGUgcmF0ZSBtYXkgYmUgbG93LCB0aGVyZSBpcyBhIGdhcCBpbiB0aGUgZGF0YS4gV2UgZG8gbm90IGtub3cgaWYgQWZyaWNhbiBBbWVyaWNhbiByZW50ZXJzIGFyZSBldmljdGVkIGF0IGhpZ2hlciByYXRlcyBiZWNhdXNlIHdlIGRvIG5vdCBoYXZlIGV2aWN0aW9uIGRhdGEgYnkgcmFjZS4gU28gd2hpbGUgdGhlIHJhdGUgaW4gdGhlIGNvdW50eSB3aXRoIHRoZSBoaWdoZXN0IG51bWJlciBvZiBldmljdGlvbnMgaXMgbG93LCBpdCBjb3VsZCBiZSBkaXNwcm9wb3J0aW9uYXRlbHkgQWZyaWNhbiBBbWVyaWNhbnMgd2hvIGFyZSBldmljdGVkLg0KDQpgYGB7cn0NCm1uX21hcCA8LSBjb3VudHlfbWFwICU+JSBmaWx0ZXIocmVnaW9uID09ICJtaW5uZXNvdGEiKSAlPiUgc2VsZWN0KC1yZWdpb24pICU+JSBkcGx5cjo6cmVuYW1lKHJlZ2lvbiA9IHN1YnJlZ2lvbikNCg0KcmFjZSA8LSBldmljdGlvbnNfY291bnR5ICU+JSANCiAgZmlsdGVyKGBwYXJlbnQtbG9jYXRpb25gID09ICJNaW5uZXNvdGEiLA0KICAgICAgICAgeWVhciA9PSAyMDE2KSAlPiUgDQogIG11dGF0ZShsd3JfbmFtZSA9IHN0cl90b19sb3dlcihuYW1lKSkgJT4lIA0KICBnZ3Bsb3QoYWVzKGZpbGwgPSBgcGN0LWFmLWFtYCkpICsNCiAgZ2VvbV9tYXAobWFwID0gbW5fbWFwLA0KICAgICAgICAgICBhZXMobWFwX2lkID0gbHdyX25hbWUpKSArDQogIHNjYWxlX2ZpbGxfdmlyaWRpc19jKGxhYmVscyA9IGNvbW1hKSArDQogIGV4cGFuZF9saW1pdHMoeCA9IG1uX21hcCRsb25nLCB5ID0gbW5fbWFwJGxhdCkgKyANCiAgdGhlbWVfbWFwKCkgKw0KICBsYWJzKHRpdGxlID0gIiUgQWZyaWNhbiBBbWVyaWNhbiIsDQogICAgICAgZmlsbCA9ICIiLA0KICAgICAgIGNhcHRpb24gPSAiRGF0YSBmcm9tIDIwMTYiKSArDQogIHRoZW1lKGxlZ2VuZC5iYWNrZ3JvdW5kID0gZWxlbWVudF9ibGFuaygpLA0KICAgICAgICAgICAgbGVnZW5kLnBvc2l0aW9uID0gInJpZ2h0IikNCg0KZXZpY3Rpb25fcmF0ZSA8LSBldmljdGlvbnNfY291bnR5ICU+JSANCiAgZmlsdGVyKGBwYXJlbnQtbG9jYXRpb25gID09ICJNaW5uZXNvdGEiLA0KICAgICAgICAgeWVhciA9PSAyMDE2KSAlPiUgDQogIG11dGF0ZShsd3JfbmFtZSA9IHN0cl90b19sb3dlcihuYW1lKSkgJT4lIA0KICBnZ3Bsb3QoYWVzKGZpbGwgPSBgZXZpY3Rpb24tcmF0ZWApKSArDQogIGdlb21fbWFwKG1hcCA9IG1uX21hcCwNCiAgICAgICAgICAgYWVzKG1hcF9pZCA9IGx3cl9uYW1lKSkgKw0KICBzY2FsZV9maWxsX3ZpcmlkaXNfYyhsYWJlbHMgPSBjb21tYSkgKw0KICBleHBhbmRfbGltaXRzKHggPSBtbl9tYXAkbG9uZywgeSA9IG1uX21hcCRsYXQpICsgDQogIHRoZW1lX21hcCgpICsNCiAgbGFicyh0aXRsZSA9ICJFdmljdGlvbiBSYXRlIiwNCiAgICAgICBmaWxsID0gIiIsDQogICAgICAgY2FwdGlvbiA9ICJEYXRhIGZyb20gMjAxNiIpICsNCiAgdGhlbWUobGVnZW5kLmJhY2tncm91bmQgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAicmlnaHQiKQ0KDQpyYWNlIHwgZXZpY3Rpb25fcmF0ZQ0KDQpldmljdGlvbnMgPC0gZXZpY3Rpb25zX2NvdW50eSAlPiUgDQogIGZpbHRlcihgcGFyZW50LWxvY2F0aW9uYCA9PSAiTWlubmVzb3RhIiwNCiAgICAgICAgIHllYXIgPT0gMjAxNikgJT4lIA0KICBtdXRhdGUobHdyX25hbWUgPSBzdHJfdG9fbG93ZXIobmFtZSkpICU+JSANCiAgZ2dwbG90KGFlcyhmaWxsID0gYGV2aWN0aW9uc2ApKSArDQogIGdlb21fbWFwKG1hcCA9IG1uX21hcCwNCiAgICAgICAgICAgYWVzKG1hcF9pZCA9IGx3cl9uYW1lKSkgKw0KICBzY2FsZV9maWxsX3ZpcmlkaXNfYyhsYWJlbHMgPSBjb21tYSkgKw0KICBleHBhbmRfbGltaXRzKHggPSBtbl9tYXAkbG9uZywgeSA9IG1uX21hcCRsYXQpICsgDQogIHRoZW1lX21hcCgpICsNCiAgbGFicyh0aXRsZSA9ICJOdW1iZXIgb2YgRXZpY3Rpb25zIiwNCiAgICAgICBmaWxsID0gIiIsDQogICAgICAgY2FwdGlvbiA9ICJEYXRhIGZyb20gMjAxNiIpICsNCiAgdGhlbWUobGVnZW5kLmJhY2tncm91bmQgPSBlbGVtZW50X2JsYW5rKCksDQogICAgICAgICAgICBsZWdlbmQucG9zaXRpb24gPSAicmlnaHQiKQ0KDQpyYWNlIHwgZXZpY3Rpb25zDQpgYGANCg0KIyMjIE91ciBTaGlueSBBcHANCkNsaWNrIFtIZXJlXShodHRwczovL2FsZXhob3BraW5zLnNoaW55YXBwcy5pby9VUy1FdmljdGlvbnMvKSB0byBpbnRlcmFjdCB3aXRoIHRoZSBkYXRhIHlvdXJzZWxmISBDaG9vc2UgZnJvbSB2YXJpb3VzIGZhY3RvcnMgbGlrZSByYWNlLCBtZWRpYW4gcmVudCwgYW5kIHllYXIgdG8gZGlzcGxheSBncmFwaHMgdG8gc2VlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiBkZW1vZ3JhcGhpY3MgYW5kIGV2aWN0aW9ucy4gVGhlIGZpcnN0IHRhYiBkaXNwbGF5cyBzdGF0ZXdpZGUgZGF0YSwgYW5kIHRoZSBzZWNvbmQgImJ5IHN0YXRlIiB0YWIgZGlzcGxheXMgaW5kaXZpZHVhbCBzdGF0ZXMgYW5kIHRoZWlyIGNvdW50eS1sZXZlbCBkYXRhLiBCb3RoIHRhYnMgaGF2ZSBhIGNoZWNrIGJveCB0aGF0IGFsbG93cyB0aGUgdXNlciB0byBvdmVybGF5IGV2aWN0aW9uIHJhdGUgZGF0YSBvdmVyIHN0YXRlcyBhbmQgY291bnRpZXMuIFRoaXMgYWxsb3dzIGZvciBhIGNvbXBhcmlzb24gYmV0d2VlbiB0aGUgZXZpY3Rpb24gcmF0ZSBhbmQgdGhlIGRlbW9ncmFwaGljcyBvZiB0aG9zZSBwbGFjZXMuDQoNCiMjIyBGaW5hbCBSZW1hcmtzDQpXZSBvYnNlcnZlIHRoYXQgYXJlYXMgd2l0aCBsYXJnZXIgcG9wdWxhdGlvbnMgaGF2ZSBoaWdoZXIgZXZpY3Rpb24gcmF0ZXMsIHdoaWNoIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIE1vcmUgcGVvcGxlIG1lYW5zIG1vcmUgcmVudGVycywgd2hpY2ggbWVhbnMgbW9yZSBjaGFuY2VzIGZvciBldmljdGlvbnMuIFN0YXRlcyBsaWtlIE5ldmFkYSBhbmQgQXJpem9uYSBoYWQgbGFyZ2UgZXZpY3Rpb24gcmF0ZXMgYXQgZmlyc3QsIGJ1dCBvdmVyIHRpbWUgdGhleSBoYXZlIGRpbWluaXNoZWQsIHdoaWxlIHN0YXRlcyBsaWtlIFNvdXRoIENhcm9saW5hIGhhdmUgc2VlbiBjb25zaWRlcmFibGUgcmlzZXMgaW4gdGhlaXIgZXZpY3Rpb24gcmF0ZXMuIEluIDIwMDgtMDkgdGhlIGV2aWN0aW9uIGNyaXNpcyB3YXMgaGlnaCwgbWlycm9yaW5nIHRoZSBlY29ub21pYyBjcmlzaXMuIFdlIGhvcGUgdGhhdCBjcmVhdGluZyB0aGlzIGFwcCB3aWxsIG1ha2UgaXQgZWFzaWVyIHRvIG1ha2UgaW5zaWdodHMgYWJvdXQgZXZpY3Rpb24gZGF0YSBpbiB0aGUgVS5TLiBhbmQgcHJvZHVjZSBlYXN5LXRvLXVuZGVyc3RhbmQgdmlzdWFsaXphdGlvbnMgb2YgdGhlIGV2aWN0aW9uIGRhdGEuDQoNCg==